﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Terrae.Clases;
using Terrae.Logica.Comandos;
using Terrae.Logica.Comandos.ComandoPersona;
using Terrae.Logica.Comandos.ComandoPlanta;
using Terrae.Logica.Comandos.ComandoInvernadero;

namespace Terrae.Logica.FabricaLogica
{
    public class FabricaComando
    {
        #region Comandos Persona

        /// <summary>
        /// Comando que agrega a una persona.
        /// </summary>
        /// <param name="_persona"></param>
        /// <returns></returns>
        public static Comando<bool> 
            CrearComandoAgregarPersona (Entidad _persona)
        {
            return new ComandoAgregarPersona(_persona);
        }

        /// <summary>
        /// Comando que verifica que los datos introducidos por
        /// la persona son los correctos para poder iniciar la sesion.
        /// </summary>
        /// <param name="_persona"></param>
        /// <returns></returns>
        public static Comando<Entidad>
            CrearComandoIniciarSesion(Entidad _persona)
        {
            return new ComandoIniciarSesion(_persona);
        }

        /// <summary>
        /// Comando que consulta los datos de la persona asignandole
        /// el id del invernadero
        /// </summary>
        /// <param name="_persona"></param>
        /// <returns></returns>
        public static Comando<Entidad>
            CrearComandoConsultarPersona(Entidad _persona)
        {
            return new ComandoSeleccionarPersona(_persona);
        }

        /// <summary>
        /// Comando que modifica los datos de una persona.
        /// </summary>
        /// <param name="_persona"></param>
        /// <returns></returns>
        public static Comando<bool>
            CrearComandoModificarPersona(Entidad _persona)
        {
            return new ComandoModificarPersona(_persona);
        }

        #endregion Comandos Persona

        #region Comandos Invernadero

        /// <summary>
        /// Comando que agrega un invernadero.
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<bool>
            CrearComandoAgregarInvernadero(Entidad _invernadero)
        {
            return new ComandoAgregarInvernadero(_invernadero);
        }

        /// <summary>
        /// Comando que lista todos los invernaderos de una persona.
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<List<Entidad>>
            CrearComandoListarInvernaderos(Entidad _invernadero)
        {
            return new ComandoListarInvernaderos(_invernadero);
        }

        /// <summary>
        /// Comando para insertar los valores de las variables del invernadero.
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<bool>
            CrearComandoInsertarVariables(Entidad _invernadero)
        {
            return new ComandoInsertarVariables(_invernadero);
        }

        /// <summary>
        /// Comando que consulta las variables de un invernadero
        /// (Temperatura, humedad, acidez y luminosidad).
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<Entidad>
            CrearComandoConsultarVariable(Entidad _invernadero)
        {
            return new ComandoConsultarVariable(_invernadero);
        }

        /// <summary>
        /// Comando que consulta las variables de un invernadero
        /// (Temperatura, humedad, acidez y luminosidad).
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<Entidad>
            CrearComandoConsultarVariableM(Entidad _invernadero)
        {
            return new ComandoConsultarVariableM(_invernadero);
        }

        /// <summary>
        /// Comando que lista todos las variables de un invernadero.
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<int>
            CrearComandoListarVariables(Entidad _invernadero)
        {
            return new ComandoListarVariables(_invernadero);
        }

        /// <summary>
        /// Comando que modifica los datos de un invernadero.
        /// </summary>
        /// <param name="_invernadero"></param>
        /// <returns></returns>
        public static Comando<bool>
            CrearComandoModificarInvernadero(Entidad _invernadero)
        {
            return new ComandoModificarInvernadero(_invernadero);
        }

        #endregion Comando Invernadero

        #region Comandos Planta

        /// <summary>
        /// Comando que agrega una planta.
        /// </summary>
        /// <param name="_planta"></param>
        /// <returns></returns>
        public static Comando<bool> CrearComandoAgregarPlanta(Entidad _planta)
        {
            return new ComandoAgregarPlanta(_planta);
        }

        #endregion Comandos Planta
    }
}